]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
altTab: Set allocation before allocating children
authorJonas Dreßler <verdre@v0yd.nl>
Thu, 12 Mar 2020 12:37:53 +0000 (13:37 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 27 Apr 2020 17:53:27 +0000 (19:53 +0200)
Just as with the last commit, we should not break the assumption made by
Clutter that parents have their allocation set before their children get
allocated, so fix that here, too.

In this case we have to fix it by chaining up to the parent vfunc
override and updating the allocation once more before allocating the
`this._label` child.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/1615

js/ui/altTab.js

index 94b80f7920745de228c4407445730825225d0cb2..1c35a001e913122d984ecc07db46468a283f1956 100644 (file)
@@ -1060,25 +1060,25 @@ class WindowSwitcher extends SwitcherPopup.SwitcherList {
     vfunc_allocate(box, flags) {
         let themeNode = this.get_theme_node();
         let contentBox = themeNode.get_content_box(box);
+        const labelHeight = this._label.height;
+        const totalLabelHeight =
+            labelHeight + themeNode.get_padding(St.Side.BOTTOM);
 
-        let childBox = new Clutter.ActorBox();
-        childBox.x1 = contentBox.x1;
-        childBox.x2 = contentBox.x2;
-        childBox.y2 = contentBox.y2;
-        childBox.y1 = childBox.y2 - this._label.height;
-        this._label.allocate(childBox, flags);
-
-        let totalLabelHeight = this._label.height + themeNode.get_padding(St.Side.BOTTOM);
-        childBox.x1 = box.x1;
-        childBox.x2 = box.x2;
-        childBox.y1 = box.y1;
-        childBox.y2 = box.y2 - totalLabelHeight;
-        super.vfunc_allocate(childBox, flags);
+        box.y2 -= totalLabelHeight;
+        super.vfunc_allocate(box, flags);
 
         // Hooking up the parent vfunc will call this.set_allocation() with
         // the height without the label height, so call it again with the
         // correct size here.
+        box.y2 += totalLabelHeight;
         this.set_allocation(box, flags);
+
+        const childBox = new Clutter.ActorBox();
+        childBox.x1 = contentBox.x1;
+        childBox.x2 = contentBox.x2;
+        childBox.y2 = contentBox.y2;
+        childBox.y1 = childBox.y2 - labelHeight;
+        this._label.allocate(childBox, flags);
     }
 
     highlight(index, justOutline) {